import LoggerConfigType from "@/log/index";
import DataTimeFormat from "@/util/DataTimeFormat.ts";

const format = DataTimeFormat.dateTimeFormat;

/**
 * 日志记录器
 */
export default class Logger{
    /**
     * 日志打印配置
     */
    public static logConfig: LoggerConfigType = {
        isEnableTrace: true,
        isEnableDebug: true,
        isEnableInfo: true,
        isEnableWarn: true,
        isEnableError: true
    };

    private readonly target: string;

    constructor(target: string) {
        this.target = target + ":";
    }
    /**
     * 打印trace日志
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    trace(msg: string, ...data: never[]): void {
        // eslint-disable-next-line @typescript-eslint/no-unused-expressions
        Logger.logConfig.isEnableTrace &&
        console.trace("%c" + format(new Date()) + " [TRACE] " + this.target, "color: #DC143C", msg, ...data);
    }
    /**
     * 打印debug日志
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    debug(msg: string, ...data: any[]): void {
        // eslint-disable-next-line @typescript-eslint/no-unused-expressions
        Logger.logConfig.isEnableDebug &&
        console.debug("%c" + format(new Date()) + " [DEBUG] " + this.target, "color: #20B2AA", msg, ...data);
    }
    /**
     * 打印info日志
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    info(msg: string, ...data: any[]): void {
        // eslint-disable-next-line @typescript-eslint/no-unused-expressions
        Logger.logConfig.isEnableInfo &&
        console.debug("%c" + format(new Date()) + " [INFO] " + this.target, "color: #228B22", msg, ...data);
    }
    /**
     * 打印warn日志
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    warn(msg: string, ...data: any[]): void {
        // eslint-disable-next-line @typescript-eslint/no-unused-expressions
        Logger.logConfig.isEnableWarn &&
        console.warn(format(new Date()), "[WARN]", this.target, msg, ...data);
    }
    /**
     * 打印error日志
     * @param msg 打印日志的说明
     * @param data 打印日志的附加数据
     */
    error(msg: string, ...data: any[]): void {
        // eslint-disable-next-line @typescript-eslint/no-unused-expressions
        Logger.logConfig.isEnableError &&
        console.error(format(new Date()), "[ERROR]", this.target, msg, ...data);
    }

    /**
     * 空方法,用于占位,避免编译警告
     */
    empty(): void{

    }
}